package com.pig4cloud.pigx.strategy.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * StrategyStopOrderContractEnum
 *
 * @since 2021/11/14
 */
public enum StrategyStopOrderContractEnum {
    ;

    /**
     * 单向/双向（0单向、1双向）
     */
    @Getter
    @AllArgsConstructor
    public enum SideType {
        /**
         * 0 单向
         */
        ONE_WAY("单向", "0"),
        /**
         * 1 双向
         */
        TWO_WAY("双向", "1");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (SideType item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (SideType item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 价格类型（0最新价格、1指数价格、2标记价格）
     */
    @Getter
    @AllArgsConstructor
    public enum PriceType {

        LAST("最新价格", "0"),
        INDEX("指数价格", "1"),
        MARK("标记价格", "2");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (PriceType item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (PriceType item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 实际触发方向（0止盈、1止损）
     */
    @Getter
    @AllArgsConstructor
    public enum ActualTriggerSide {
        /**
         * 0 止盈
         */
        PROFIT("止盈", "0"),
        /**
         * 1 止损
         */
        LOST("止损", "1");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (ActualTriggerSide item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (ActualTriggerSide item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 委托状态（0待生效、1已生效、2已撤销、3委托失败、4异常）
     */
    @Getter
    @AllArgsConstructor
    public enum Status {
        /**
         * 0 待生效
         */
        NOT_ACTIVE("待生效", "0"),
        /**
         * 1 已生效
         */
        ACTIVATED("已生效", "1"),
        /**
         * 2 已撤销
         */
        REVOKED("已撤销", "2"),
        /**
         * 3 委托失败
         */
        FAIL("委托失败", "3"),
        /**
         * 4 异常
         */
        ERROR("异常", "4"),
        /**
         * 5 http异常
         */
        HTTP_ERROR("http异常", "5");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (Status item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (Status item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 同步状态（0未同步、1同步中、2同步成功）
     */
    @Getter
    @AllArgsConstructor
    public enum SyncStatus {
        /**
         * 0 未同步
         */
        NOT_SYNC("未同步", "0"),
        /**
         * 1 同步中
         */
        RUNNING("同步中", "1"),
        /**
         * 2 同步成功
         */
        DONE("同步成功", "2");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (SyncStatus item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (SyncStatus item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 止盈止损触发价格类型（0市价、1限价）
     */
    @Getter
    @AllArgsConstructor
    public enum StopType {
        /**
         * 0 市价
         */
        MARKET("市价", "0"),
        /**
         * 1 限价
         */
        LIMIT("限价", "1");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (StopType item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (StopType item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 数量类型（0张数、1百分比）
     */
    @Getter
    @AllArgsConstructor
    public enum NumType {
        /**
         * 0 张
         */
        SHEET("张", "0"),
        /**
         * 1 百分比
         */
        PERCENT("百分比", "1");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (NumType item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gong_da_kai
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (NumType item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }
}
